/**
 * 网络请求工具类
 */

// 服务器地址
const BASE_URL = 'http://localhost:8080';

/**
 * 发送请求
 * @param {Object} options 请求配置
 * @returns {Promise} Promise对象
 */
const request = (options) => {
  return new Promise((resolve, reject) => {
    // 获取token
    const token = wx.getStorageSync('token');
    
    // 请求头
    const header = {
      'Content-Type': 'application/json'
    };
    
    // 如果有token，则添加到请求头，使用Bearer格式
    if (token) {
      header['Authorization'] = `Bearer ${token}`;
    }
    
    // 发送请求
    wx.request({
      url: BASE_URL + options.url,
      method: options.method || 'GET',
      data: options.data || {},
      header: header,
      success: (res) => {
        // 请求成功
        if (res.statusCode === 200) {
          // 检查res.data是否包含code属性，如果包含，则按照原逻辑判断业务成功
          if (typeof res.data === 'object' && res.data !== null && 'code' in res.data) {
            // 接受状态码0和200都表示成功
            if (res.data.code === 200 || res.data.code === 0) {
              resolve(res.data);
            } else {
              // 业务失败
              wx.showToast({
                title: res.data.message || res.data.msg || '请求失败',
                icon: 'none'
              });
              reject(res.data);
            }
          } else {
            // 如果res.data不包含code属性，则直接认为成功（适用于直接返回数据的情况）
            resolve(res.data);
          }
        } else if (res.statusCode === 401) {
          // 未登录或token过期
          wx.removeStorageSync('token');
          wx.removeStorageSync('userInfo');
          
          const app = getApp();
          if (app) {
            app.globalData.isLogin = false;
            app.globalData.userInfo = null;
            app.globalData.token = null;
          }
          
          wx.showToast({
            title: '登录已过期，请重新登录',
            icon: 'none'
          });
          
          // 延迟跳转到登录页
          setTimeout(() => {
            wx.navigateTo({
              url: '/pages/user/login'
            });
          }, 1500);
          
          reject(res.data);
        } else {
          // 其他错误
          wx.showToast({
            title: '服务器异常',
            icon: 'none'
          });
          reject(res.data);
        }
      },
      fail: (err) => {
        // 请求失败
        wx.showToast({
          title: '网络异常',
          icon: 'none'
        });
        reject(err);
      }
    });
  });
};

/**
 * GET请求
 * @param {String} url 请求地址
 * @param {Object} data 请求参数
 * @returns {Promise} Promise对象
 */
const get = (url, data) => {
  return request({
    url,
    method: 'GET',
    data
  });
};

/**
 * POST请求
 * @param {String} url 请求地址
 * @param {Object} data 请求参数
 * @returns {Promise} Promise对象
 */
const post = (url, data) => {
  return request({
    url,
    method: 'POST',
    data
  });
};

/**
 * PUT请求
 * @param {String} url 请求地址
 * @param {Object} data 请求参数
 * @returns {Promise} Promise对象
 */
const put = (url, data) => {
  return request({
    url,
    method: 'PUT',
    data
  });
};

/**
 * DELETE请求
 * @param {String} url 请求地址
 * @param {Object} data 请求参数
 * @returns {Promise} Promise对象
 */
const del = (url, data) => {
  return request({
    url,
    method: 'DELETE',
    data
  });
};

module.exports = {
  request,
  get,
  post,
  put,
  del
}; 